/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.gob.fonafe.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;
import pe.gob.fonafe.dao.SubastaDAO;
import pe.gob.fonafe.dao.impl.stored.ActualizaSubastaSP;
import pe.gob.fonafe.dao.impl.stored.DesagregarBienesSubastaPublicadaSP;
import pe.gob.fonafe.dao.impl.stored.EliminaSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarAsignarSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarBienesAsignaSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarBienesAsociadosSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarBienesBySubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarBienesByVersionSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarClaseSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarResultadosBySubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarResultadosByVersionSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarTipoSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarTopSubastaSP;
import pe.gob.fonafe.dao.impl.stored.ListarVersionSubastaSP;
import pe.gob.fonafe.dao.impl.stored.RegistaResultadoBySubastaSP;
import pe.gob.fonafe.dao.impl.stored.RegistraBienesBySubastaSP;
import pe.gob.fonafe.dao.impl.stored.RegistraConsultaReclamosSP;
import pe.gob.fonafe.dao.impl.stored.RegistraFilesConsultaReclamoSubastaSP;
import pe.gob.fonafe.dao.impl.stored.RegistraSubastaSP;
import pe.gob.fonafe.domain.BienSubastaBean;
import pe.gob.fonafe.domain.BuscaSubastaBean;
import pe.gob.fonafe.domain.ClaseSubastaBean;
import pe.gob.fonafe.domain.ConsultaReclamoBean;
import pe.gob.fonafe.domain.ResultadosSubastaBean;
import pe.gob.fonafe.domain.SubastaBean;
import pe.gob.fonafe.domain.TipoSubastaBean;

/**
 *
 * @author czela
 */
@Repository
public class SubastaDAOImpl extends SimpleJdbcDaoSupport implements SubastaDAO{

    private static final Logger logger = Logger.getLogger(SubastaDAOImpl.class);

    @Autowired
    public SubastaDAOImpl(DataSource dataSource) {
        super.setDataSource(dataSource);
    }

    public List<SubastaBean> buscaSubasta(BuscaSubastaBean buscaSubastaBean) {
        List<SubastaBean> listSubasta = new ArrayList<SubastaBean>();
        try{
            ListarSubastaSP sp = new ListarSubastaSP(getDataSource());
            Map results = sp.execute(buscaSubastaBean);
            listSubasta = (List<SubastaBean>)results.get("cCURSOR");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listSubasta;
    }

    public List<BienSubastaBean> getBienesBySubasta(String idSubasta) {
        List<BienSubastaBean> listBienesBySubasta = new ArrayList<BienSubastaBean>();
        try{
            ListarBienesBySubastaSP sp = new ListarBienesBySubastaSP(getDataSource());
            Map results = sp.execute(idSubasta);
            listBienesBySubasta = (List<BienSubastaBean>)results.get("cCURSOR");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listBienesBySubasta;
    }

    public String[] registrarConsultaReclamo(ConsultaReclamoBean consultaReclamoBean) {
        String[] outPuts = new String[2];
        try{
            RegistraConsultaReclamosSP sp = new RegistraConsultaReclamosSP(getDataSource());
            Map results = sp.execute(consultaReclamoBean);
            outPuts[0] = (String)results.get("V_EXITO");
            outPuts[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outPuts;
    }

    public String[] registraFilesConsultaReclamo(String idConsRec, String idSubasta, byte[] file,String nomFile,String typeFile) {
        String[] outputs = new String[2];
        try{
            RegistraFilesConsultaReclamoSubastaSP sp = new RegistraFilesConsultaReclamoSubastaSP(getDataSource());
            Map results = sp.execute(idConsRec, idSubasta, file, nomFile, typeFile);
            outputs[0] = (String)results.get("V_EXITO");
            outputs[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outputs;
    }

    public List<SubastaBean> listAsignaSubasta(int intIDEmpresa) {
        List<SubastaBean> listaAsignaSubasta = new ArrayList<SubastaBean>();
        try{
            ListarAsignarSubastaSP sp = new ListarAsignarSubastaSP(getDataSource());
            Map results = sp.execute(intIDEmpresa);
            listaAsignaSubasta = (List<SubastaBean>)results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listaAsignaSubasta;
    }


    public List<SubastaBean> listVersionesSubasta(int idSubasta) {
        List<SubastaBean> listaVersionesSubasta = new ArrayList<SubastaBean>();
        try{
            ListarVersionSubastaSP sp = new ListarVersionSubastaSP(getDataSource());
            Map results = sp.execute(idSubasta);
            listaVersionesSubasta = (List<SubastaBean>)results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listaVersionesSubasta;
    }

    public List<BienSubastaBean> listBienesSubasta(String idClase, int intIDEmpresa) {
        List<BienSubastaBean> listaBienSubasta = new ArrayList<BienSubastaBean>();
        try{
            ListarBienesAsignaSubastaSP sp = new ListarBienesAsignaSubastaSP(getDataSource());
            Map results = sp.execute(idClase,intIDEmpresa);
            listaBienSubasta = (List<BienSubastaBean>)results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listaBienSubasta;
    }

    public String[] registrarSubasta(String idUsuario, SubastaBean subasta, byte[] bases, String nombases, String contentTypeBase) {
        String[] outPuts = new String[3];
        try{
            RegistraSubastaSP sp = new RegistraSubastaSP(getDataSource());
            Map results = sp.execute(idUsuario, subasta, bases, nombases, contentTypeBase);
            outPuts[0] = (String)results.get("V_EXITO");
            outPuts[1] = (String)results.get("V_MENSAJE");
            outPuts[2] = (String)results.get("V_VERSION");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outPuts;
    }

    public String[] registraBienesBySubasta(String idSubasta, String idBien, String claseSubasta,String version) {
        String[] outPuts = new String[2];
        try{
            RegistraBienesBySubastaSP sp = new RegistraBienesBySubastaSP(getDataSource());
            Map results = sp.execute(idSubasta, idBien, claseSubasta,version);
            outPuts[0] = (String)results.get("V_EXITO");
            outPuts[1] = (String)results.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outPuts;
    }

    public String[] eliminarSubasta(SubastaBean subastaBean) {
        String[] outPuts = new String[2];
        try{
            EliminaSubastaSP sp = new EliminaSubastaSP(getDataSource());
            Map results = sp.execute(subastaBean);
            outPuts[0] = (String)results.get("V_EXITO");
            outPuts[1] = (String)results.get("V_MENSAJE");
            logger.info("eliminar subasta mensaje "+outPuts[1]+" numero "+outPuts[0]);
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outPuts;
    }

    public String[] actualizarSubasta(String idUsuario, SubastaBean subasta, byte[] bases, String nombases, String contentTypeBase) {
        String[] outPuts= new String[3];
        try{
            ActualizaSubastaSP sp = new ActualizaSubastaSP(getDataSource());
            Map results = sp.execute(idUsuario, subasta, bases, nombases, contentTypeBase);
            outPuts[0] = (String)results.get("V_EXITO");
            outPuts[1] = (String)results.get("V_MENSAJE");
            outPuts[2] = (String)results.get("V_VERSION");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outPuts;
    }

    public List<BienSubastaBean> listaBienesAsociados(String idSubasta, String idClase) {
        List<BienSubastaBean> listBienesAsociados = new ArrayList<BienSubastaBean>();
        try{
            ListarBienesAsociadosSubastaSP sp = new ListarBienesAsociadosSubastaSP(getDataSource());
            Map results = sp.execute(idSubasta, idClase);
            listBienesAsociados = (List<BienSubastaBean>)results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listBienesAsociados;
    }

    public List<BienSubastaBean> listBienesByVersionSubasta(String idSubasta, String version) {
        List<BienSubastaBean> listBienesVersion = new ArrayList<BienSubastaBean>();
        try{
            ListarBienesByVersionSubastaSP sp = new ListarBienesByVersionSubastaSP(getDataSource());
            Map results = sp.execute(idSubasta, version);
            listBienesVersion = (List<BienSubastaBean>)results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listBienesVersion;
    }

    public String[] desagregarBienesSubasta(String idClase, String idBien) {
        String[] outPuts= new String[2];
        try{
            DesagregarBienesSubastaPublicadaSP sp = new DesagregarBienesSubastaPublicadaSP(getDataSource());
            Map resuls = sp.execute(idClase, idBien);
            //logger.info("V_Exito [" + (String)resuls.get("V_EXITO") + "]");
            outPuts[0] = (String) resuls.get("V_EXITO");
            //logger.info("V_Mensaje [" + (String)resuls.get("V_MENSAJE") + "]");
            outPuts[1] = (String) resuls.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outPuts;
    }

    public List<TipoSubastaBean> listTipoSubasta() {
        List<TipoSubastaBean> listTipoSubasta = new ArrayList<TipoSubastaBean>();
        try{
            ListarTipoSubastaSP sp = new ListarTipoSubastaSP(getDataSource());
            Map results = sp.execute();
            listTipoSubasta = (List<TipoSubastaBean>)results.get("cCURSOR");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listTipoSubasta;
    }

    public List<ClaseSubastaBean> listClaseSubasta() {
        List<ClaseSubastaBean> listClaseSubasta = new ArrayList<ClaseSubastaBean>();
        try{
            ListarClaseSubastaSP sp = new ListarClaseSubastaSP(getDataSource());
            Map results = sp.execute();
            listClaseSubasta = (List<ClaseSubastaBean>)results.get("cCURSOR");
        }catch (Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listClaseSubasta;
    }

    public List<SubastaBean> ObtenerTopSubasta() {
         List<SubastaBean> listSubasta = new ArrayList<SubastaBean>();
        try{
            ListarTopSubastaSP sp = new ListarTopSubastaSP(getDataSource());
            Map results = sp.execute();
            listSubasta = (List<SubastaBean>)results.get("cCURSOR");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listSubasta;
    }

    public List<ResultadosSubastaBean> obtenerResultados(int idSubasta) {
        List<ResultadosSubastaBean> listResultados = new ArrayList<ResultadosSubastaBean>();
        try{
            ListarResultadosBySubastaSP sp = new ListarResultadosBySubastaSP(getDataSource());
            Map results = sp.execute(idSubasta);
            listResultados = (List<ResultadosSubastaBean>) results.get("cCURSOR");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listResultados;
    }

    public List<ResultadosSubastaBean> obtenerResultadosByVersion(String idSubasta, String version) {
        List<ResultadosSubastaBean> listResultadoVersion = new ArrayList<ResultadosSubastaBean>();
        try{
            ListarResultadosByVersionSubastaSP sp = new ListarResultadosByVersionSubastaSP(getDataSource());
            Map results = sp.execute(idSubasta, version);
            listResultadoVersion = (List<ResultadosSubastaBean>) results.get("cCursor");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return listResultadoVersion;
    }


    public String[] registrarResultados(int idSubasta, ResultadosSubastaBean bean,int version) {
        String[] outPuts= new String[2];
        try{
            RegistaResultadoBySubastaSP sp = new RegistaResultadoBySubastaSP(getDataSource());
            Map resuls = sp.execute(idSubasta, bean,version);
            //logger.info("V_Exito [" + (String)resuls.get("V_EXITO") + "]");
            outPuts[0] = (String) resuls.get("V_EXITO");
            //logger.info("V_Mensaje [" + (String)resuls.get("V_MENSAJE") + "]");
            outPuts[1] = (String) resuls.get("V_MENSAJE");
        }catch(Exception ex){
            ex.printStackTrace();
            logger.error(ex);
        }
        return outPuts;
    }





}
